<?php

//常量

define('HOME_PID',999);
define('GOODS_PID',2);
define('USERMENU_PID',75);

    /**
     * 电话号码中间四位用星号表示
     * @param $mobile 电话号码字符串
     * @return string
     */
    function shieldMobile($mobile){
        $str1 = substr($mobile,0,3);
        $str2 = substr($mobile,-4);
        return $str1 . '****' . $str2;
    }

    //随机订单号
    function getRandOrder(){
        return time() . rand(0,9) . rand(0,9) . session('home_uid') . rand(0,9) . rand(0,9);
    }

    //保留两位
    function keepTwo($str){
        return sprintf("%01.2f",$str);
    }

    /**
     * 检测是否空
     * @param $value
     * @return bool
     */
    function not_empty($value)
    {
        if(empty($value)){
            return false;
        }else{
            return true;
        }
    }

    /**
     * 正整数
     * @param $argv
     * @return bool
     */
    function is_positive_int($argv){
        $reg_exp = '/^[1-9]\d*$/';
        return preg_match($reg_exp,$argv)?$argv:false;
    }


/**
     * @param $argv 要检测的字符串
     * @return bool
     */
    function is_username($argv){
        $reg_exp = '/^[a-zA-Z][a-zA-Z0-9]{3,19}$/'; //由大小写字母跟数字组成并且长度在4-16字符直接
        return preg_match($reg_exp,$argv)?$argv:false;
    }



    /**
     * @param $argv 要检测的字符串
     * @return bool
     */
    function is_birthday($argv){
        $reg_exp = '/^\d{4}(\-)\d{1,2}\1\d{1,2}$/'; //由大小写字母跟数字组成并且长度在4-16字符直接
        return preg_match($reg_exp,$argv)?$argv:false;
    }



    /**
     * is_mobile函数:检测参数的值是否为正确的中国手机号码格式
     * 返回值:是正确的手机号码返回手机号码,不是返回false
     */
    function is_mobile($argv){
        $reg_exp='/^(?:13|15|18|17|14)[0-9]{9}$/';
        return preg_match($reg_exp,$argv)?$argv:false;
    }

    /**
     * is_mail函数:检测是否为正确的邮件格式
     * 返回值:是正确的邮件格式返回邮件,不是返回false
     */
    function is_mail($argv){
        $reg_exp='/^[a-z0-9][a-z\.0-9-_]+@[a-z0-9_-]+(?:\.[a-z]{0,3}\.[a-z]{0,2}|\.[a-z]{0,3}|\.[a-z]{0,2})$/i';
        return preg_match($reg_exp,$argv)?$argv:false; //	preg_match('正则','要匹配的字符串')
    }

    /**
     * @param $argv 要检测的字符串
     * @return bool
     */
    function is_password($argv){
        $reg_exp = '/^[a-zA-Z0-9]{6,20}$/'; //由大小写字母跟数字组成并且长度在6-20字符直接
        return preg_match($reg_exp,$argv)?$argv:false;
    }

    /**
     * [is_money 判断数据是否符合价格]
     * @param  [type]  $money [要验证的价格]
     * @return boolean        [符合价格 true]
     */
    function is_money($money){
        $reg_exp='/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/';
        if(preg_match($reg_exp,$money)){
            // 符合价格
            if($money != 0){
                return true;
            }else{
                //价格 == 0
                return false;
            }
        }else{
            return false;
        }
    }



    /**
     * 检测输入的验证码是否正确
     * @param $code     用户输入的验证码
     * @param bool $reset 是否重置验证码
     * @param string $id  验证码id 当你页面需要多个验证码的时候
     * @return bool
     */
    function check_verify($code,$reset = false, $id = '',$isAjaxReturn = 1){
        $verify = new \Think\Verify();
        $verify->reset = $reset;
        $res = $verify->check($code, $id);
        if(IS_AJAX && $isAjaxReturn == 1){
            header('Content-Type:application/json; charset=utf-8');
            $data = json_encode($res);
            exit($data);
        }else{
            return $res;
        }
    }

    /**
     * @param $count 总条数
     * @param string $header   总条数提示
     * @param int $showItemNum   每页显示条数
     * @param int $rollPage     显示页码数量
     * @return string
     */
    function c_page($count,$header = '个管理员',$itemNum=6,$rollPage = 5)
    {
        $Page = new \Think\Page($count,$itemNum);// 实例化分页类 传入总记录数和每页显示的记录数(1)
        $Page->setConfig('first','首页');
        $Page->setConfig('prev','<');
        $Page->setConfig('next','>');
        $Page->setConfig('header','共 %TOTAL_ROW% '.$header);
        $Page->setConfig('last','尾页');
        $Page->lastSuffix = false;
        $Page->rollPage = $rollPage ;
        $Page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
        $show = $Page->show();// 分页显示输出
        return $show;
    }

    /**
     * @param $count 总条数
     * @param string $header   总条数提示
     * @param int $showItemNum   每页显示条数
     * @param int $rollPage     显示页码数量
     * @return string
     */
    function h_page($count,$header = '个新闻',$itemNum=6,$rollPage = 5)
    {
        $Page = new \Think\Page($count,$itemNum);// 实例化分页类 传入总记录数和每页显示的记录数(1)
        $Page->setConfig('first','首页');
        $Page->setConfig('prev','上一页');
        $Page->setConfig('next','下一页');
        $Page->setConfig('header','共 %TOTAL_ROW% '.$header);
        $Page->setConfig('last','尾页');
        $Page->lastSuffix = false;
        $Page->rollPage = $rollPage ;
        $Page->setConfig('theme','%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% ');
        $show = $Page->show();// 分页显示输出
        return $show;
    }


    /**
     * @param $data
     * @param int $pid
     * @param int $level
     * @return mixed
     */
    function get_category($data,$pid = 0,$level = 1)
    {
        if(!isset($data['old'])){
            $da['old'] = $data;//用来循环的数据
            $da['new'] = array();//记录循环好的新数据
            $data = $da;
            unset($da);
        }
        foreach ($data['old'] as $k => $v) {
            if($v['pid'] == $pid){
                $v['level'] = $level;
                // var_dump($v);exit;
                $data['new'][$v['id']] = $v;
                unset($data['old'][$k]);//把当前选中分类清除 因为我自己不可能是自己的分类
                $son = get_category($data,$v['id'],$level+1);
                if($son){
                    $data['new'] = $son;
                }
            }
        }
        return $data['new'];
    }


    /**
     * [norm_url 规范url格式]
     * @param  [type] $url [传入url 以‘/’做分隔符]
     * @return [type]      [返回模块首字母大写 控制器首字母大写 其余全小写的url]
     * $url = 'admin/INDEX/index/Id/1';
    var_dump(norm_url($url));//'Admin/Index/index/id/1
    $url = 'admin/index/index';
    var_dump(norm_url($url));//'Admin/Index/index
    $url = 'index/index';
    var_dump(norm_url($url));//'Index/index
    $url = 'index';
    var_dump(norm_url($url));//'index
    exit;
     */
    function norm_url($url){
        $url = strtolower($url);//strtolower 字符串转小写
        $url = explode('/', $url);
        // var_dump($url);
        $count = count($url);
        switch ($count) {
            case '1':
                $url = $url[0];
                break;
            case '2':
                $url[0] = ucfirst($url[0]);
                $url = implode('/', $url);
                break;
            default:
                $url[0] = ucfirst($url[0]);
                $url[1] = ucfirst($url[1]);
                $url = implode('/', $url);
                break;
        }
        return $url;
    }

    /**
     * [get_ext 获取图片后缀名]
     * @param  [type] $str [图片名]
     * @return [type]      [description]
     */
    function get_ext($str){
        $ext_index = strrpos($str, '.');//strrpos(字符串2, '字符串1') 找到字符串1在字符串2最后出现的下标
        $ext = substr($str,$ext_index+1);
        return $ext;
    }
    function get_thumb($img,$thumb='_thumb'){
        $ext = get_ext($img);
        // $img = 11.jpg
        // $thumb = _thumb
        // 11.jpg_thumb.jpg ==> y78326582326.jpg
        return $img.$thumb.'.'.$ext;
    }

    /**
     *防sql注入的方法
     *$str 要防注入的字符串
     *返回的是经过处理得字符串
     *addslashes 把字符串里面的关键符号 ' " 的前面加个转义符 'admin\' or 1 = 1'  'admin\' or \'1=1'
     *htmlspecialchars 把html字符转义 <script> &lt;script&gt; <script>alert(123);</script>
     */
    function html_trim($str){
        $str = trim($str);
        $str = htmlspecialchars($str);
        return addslashes($str);
    }
    /**
     *clear_css_js 把script
     *iframe
     *stylehtml 转义
     *images/1234567.jpg
     */
    function clear_js($str){
        $str = trim($str);
        // $str = preg_replace( "@\&lt\;script(.*?)\&lt\;\/script\&gt\;@is", "", $str );
        $str = preg_replace( "@<script(.*?)</script>@is", "", $str );
        // $str = preg_replace( "@<iframe(.*?)</iframe>@is", "", $str );
        $str = preg_replace( "@<style(.*?)</style>@is", "", $str );
        // $str = preg_replace( "@<(.*?)>@is", "", $str );
        return $str;
    }

function utf8_substr($str,$start=0,$end) {

    if(empty($str)){

        return false;

    }

    if (function_exists('mb_substr')){

        if(func_num_args() >= 3) {

            $end = func_get_arg(2);

            return mb_substr($str,$start,$end,'utf-8');

        }

        else {

            mb_internal_encoding("UTF-8");

            return mb_substr($str,$start);

        }



    }

    else {

        $null = "";

        preg_match_all("/./u", $str, $ar);

        if(func_num_args() >= 3) {

            $end = func_get_arg(2);

            return join($null, array_slice($ar[0],$start,$end));

        }

        else {

            return join($null, array_slice($ar[0],$start));

        }

    }

}


function abslength($str)
    {
        if(empty($str)){
            return 0;
        }
        if(function_exists('mb_strlen')){
            // return 123;
            // function_exists 检查函数是否已定义
            return mb_strlen($str,'utf-8');
        }
        else {
            // return 235;
            preg_match_all("/./u", $str, $ar);
            return count($ar[0]);
        }
    }

    /**
     * @param $text
     * @param $length
     * @param string $dot
     * @return string
     */
    function subtext($text, $length,$dot='...'){
        // return abslength($text);
        if(abslength($text) > $length){
            return utf8_substr($text, 0, $length).$dot;
        }
        return $text;

    }




function my_alipay($alipay){
    $alipay_config = C('ALIPAY_CONFIG');//获取 键名为ALIPAY_CONFIG的配置
    // C('ALIPAY_CONFIG',123);//设置 键名为ALIPAY_CONFIG的配置值为123

    // require_once("alipay.config.php");//支付宝配置文件
    vendor('alipay.lib.alipay_submit#class');//0301tp\ThinkPHP\Library\Vendor\alipay\lib\alipay_submit.class.php
    // vendor => 0301tp\ThinkPHP\Library\Vendor
    // alipay.lib. => \alipay\lib\
    // alipay_submit#class => alipay_submit.class.php
    // require_once("lib/alipay_submit.class.php");

    /**************************请求参数**************************/
    //支付宝接口
    //支付类型
    $payment_type = "1";
    //必填，不能修改
    //服务器异步通知页面路径 当用户一支付成功，立刻后台异步通知商城
    //做接口给支付表调用
    // 当用户一支付成功，立刻后台异步通知商城 就是 支付宝访问 异步通知页面路径 传递参数过来【post】
    $notify_url = 'http://'.I('server.HTTP_HOST').U('Goods/yb_notify_url');
    //需http://格式的完整路径，不能加?id=123这类自定义参数

    //页面跳转同步通知页面路径 当用户支付成功，支付宝显示支付成功页面，然后几秒后跳转回商城【get】
    $return_url = 'http://'.I('server.HTTP_HOST').U('User/tb_return_url');
    //需http://格式的完整路径，不能加?id=123这类自定义参数，不能写成http://localhost/
    //商户订单号
    $out_trade_no = $alipay['order_id'];
    //商户网站订单系统中唯一订单号，必填

    //订单名称
    $subject = $alipay['title'];
    //必填

    //付款金额
    // $total_fee = $alipay['all_money'];
    $total_fee = 0.01;//$alipay['all_money'];
    //必填

    //订单描述

    $body = $alipay['body'];
    //var_dump($alipay);exit;
    //商品展示地址
    $show_url = $alipay['show_url'];
    //需以http://开头的完整路径，例如：http://www.商户网址.com/myorder.html

    //防钓鱼时间戳
    $anti_phishing_key = "";
    //若要使用请调用类文件submit中的query_timestamp函数

    //客户端的IP地址
    $exter_invoke_ip = "";
    //非局域网的外网IP地址，如：221.0.0.1


    /************************************************************/

    //构造要请求的参数数组，无需改动
    $parameter = array(
        "service" => "create_direct_pay_by_user",
        "partner" => trim($alipay_config['partner']),
        "seller_email" => trim($alipay_config['seller_email']),
        "payment_type"  => $payment_type,
        "notify_url"    => $notify_url,
        "return_url"    => $return_url,
        "out_trade_no"  => $out_trade_no,
        "subject"   => $subject,
        "total_fee" => $total_fee,
        "body"  => $body,
        "t_b_pay" => '30m',//超时时间 String
        // 设置未付款交易的超时时间，一旦
        // 超时，该笔交易就会自动被关闭。
        // 取值范围： 1m～15d。
        // m-分钟， h-小时， d-天， 1c-当天（无
        // 论交易何时创建，都在 0 点关闭）。
        // 该参数数值不接受小数点，如
        // 1.5h，可转换为 90m。
        "show_url"  => $show_url,
        "anti_phishing_key" => $anti_phishing_key,
        "exter_invoke_ip"   => $exter_invoke_ip,
        "_input_charset"    => trim(strtolower($alipay_config['input_charset']))
    );

    //建立请求
    $alipaySubmit = new AlipaySubmit($alipay_config);
    $html_text = $alipaySubmit->buildRequestForm($parameter,"get", "确认");
    echo $html_text;
}


?>